package com.atguigu.gulimall.seckill.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @ClassName HelloSchedule
 * @Description TODO
 * @Detail     1、开启定时任务
 *                  1、在类上标注 @EnableScheduling
 *                  2、在方法上 @Scheduled
 *                  3、自动配置类 TaskSchedulingAutoConfiguration
 *              2、Springboot开启异步
 *                  1、@EnableAsync
 *                  2、@Async
 *                  3、自动配置类 TaskExecutionAutoConfiguration
 *
 * @Author MyPC
 * @Date 2020/7/27
 * @Version 1.0
 */
@Slf4j
@Component
public class HelloSchedule {

    /**
     * springboot的定时任务的cron表达式与其他的cron表达式的区别
     *      1、springboot的定时任务的cron表达式只有6位，省略掉最后的年
     *      2、springboot的定时任务的cron表达式中1-7分别代表周一到周日
     *  问题：
     *      springboot的定时任务默认是阻塞的，实际上不应该是阻塞的，这是由于SpringBoot默认的定时任务的线程池只有1个线程
     *  解决方案：
     *      1、使用 CompletableFuture 创建异步，自己提交至线程池
     *      2、改变定时任务线程池的线程数量，默认只有1   spring.task.scheduling.pool.size=10  可能不生效
     *      3、让定时任务异步执行
     */
    @Async
    //@Scheduled(cron = "* * * * * ?")
    public void testSchedule() throws InterruptedException {
        System.out.println("hello");
        Thread.sleep(2000L);
    }
}
